#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <vector>
#include "Thread.hpp"
using namespace std;

// #define NUM 10

// // 线程中的数据
// class ThreadData
// {
// public:
//     int num;           // 线程序号
//     pthread_t tid;     // 线程的tid
//     string ThreadName; // 线程的名字
// };

// // 线程的退出信息
// class ThreadReturn
// {
// public:
//     int exit_code; // 退出码
//     int exit_mess; // 退出信息
// };

// void *start_routine(void *arg)
// {
//     ThreadData *thread = static_cast<ThreadData *>(arg);  //类型转换
//     int cnt = 5;
//     while (cnt--)
//     {
//         cout << "new thread's name is:" << thread->ThreadName << " |cnt:" << cnt << endl;
//         sleep(1);
//     }
//     return (void*)111;   //线程退出返回一个整数的地址
//     // ThreadReturn *tr = new ThreadReturn;
//     // tr->exit_code = 222;
//     // tr->exit_mess = 111;
//     // return (void *)tr; // 线程退出返回一个对象的地址
// }
// int main()
// {
//     // 创建一个线程
//     //  pthread_t thread;
//     //  pthread_create(&thread, NULL, start_routine, (void *)"thread_1");

//     // 创建一批线程
//     vector<ThreadData *> Threads;
//     for (int i = 0; i < NUM; i++)
//     {
//         ThreadData *thread = new ThreadData();
//         thread->num = i + 1;
//         thread->ThreadName = "thread " + to_string(i);
//         Threads.push_back(thread);
//         pthread_create(&thread->tid, NULL, start_routine, (void *)thread);
//     }
//     sleep(2);
//     // 线程取消
//     for (int i = 0; i < Threads.size()/2; i++)
//     {
//         pthread_cancel(Threads[i]->tid);
//         cout << "thread cancel success:thread num:" << Threads[i]->num << endl;
//     }
//     // 线程等待
//     for (int i = 0; i < Threads.size(); i++)
//     {
//         // ThreadReturn *retval = nullptr;
//         void *retval=nullptr;
//         pthread_join(Threads[i]->tid, (void **)&retval);
//         // cout << "join success: thread exit_code:" << retval->exit_code << ",exit_mess:" << retval->exit_mess << endl;
//         cout << "join success: thread exit_code:"<<(long long)retval<<endl;
//         delete Threads[i];
//     }
//     // while (1)
//     // {
//     //     cout << "This is main thread" << endl;
//     //     sleep(1);
//     // }
// }


void *new_thread(void *arg){
    string str=static_cast<const char *>(arg);
    int cnt=5;
    while(cnt--){
        cout<<"我系新的："<<str<<endl;
        sleep(1);
    }
    return nullptr;
}

int main(){
    Thread t1(new_thread,(void *)"new_thread");
    t1.start();
    int cnt=5;
    while(cnt--){
        cout<<"我是主线程"<<endl;
        sleep(1);
    }
    t1.join();
}